package sigec_ead.controle.chamado;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.swing.JOptionPane;
import sigec_ead.controle.ConexaoJDBC;
import sigec_ead.controle.usuario.UsuarioDAO;
import sigec_ead.modelo.chamado.Chamado;

/**
 *
 * @author Joeldson
 */
public class ChamadoDAO {

    private Date data;
    private ArrayList<Chamado> result;
    private Chamado chamado;
    private SalaDAO salaDao;
    private CategoriaDAO categoriaDao;
    private EquipamentoDAO equipamentoDao;
    private UsuarioDAO usuarioDao;
 
    //Abrindo chamado...
    public void adicionarChamado(Chamado chamado) throws SQLException {

        PreparedStatement ps = null;
        Connection con = null;

        String sql = "INSERT INTO chamado (titulo,idusuario,idsala,idcategoria,idequipamento,descricao,data,estado) VALUES(?,?,?,?,?,?,?,?)";

        Calendar cal = Calendar.getInstance();
        int day = cal.get(Calendar.DATE);
        int month = cal.get(Calendar.MONTH) + 1;
        int year = cal.get(Calendar.YEAR)- 1900;
        data = new Date(year, month, day);

        try {
            con = ConexaoJDBC.getConexao();
            ps = con.prepareStatement(sql);

            ps.setString(1, chamado.getTitulo());
            ps.setInt(2, chamado.getUsuario().getId());
            ps.setInt(3, chamado.getSala().getId());
            ps.setInt(4, chamado.getCategoria().getId());
            ps.setInt(5, chamado.getEquipamento().getId());
            ps.setString(6, chamado.getDescricao());
            ps.setDate(7, data);
            ps.setBoolean(8, chamado.isEstado());
            ps.execute();

        } finally {
            JOptionPane.showMessageDialog(null, "Chamado aberto com sucesso, iremos atende-lo em breve","SUCESSO", JOptionPane.PLAIN_MESSAGE);
            ps.close();
            con.close();
        }
    }

    //consultando apenas um chamado
    public Chamado consultarChamado(int id) throws SQLException {

        PreparedStatement ps = null;
        Connection con = null;

        String sql = "SELECT * FROM chamado where id=?";

        try {
            con = ConexaoJDBC.getConexao();
            ps = con.prepareStatement(sql);
            ps.setInt(1, id);

            ResultSet rs = ps.executeQuery();

            usuarioDao = new UsuarioDAO();
            salaDao = new SalaDAO();
            categoriaDao = new CategoriaDAO();
            equipamentoDao = new EquipamentoDAO();

            if(rs.next()){
                chamado = new Chamado();

                chamado.setId(rs.getInt("id"));
                chamado.setTitulo(rs.getString("titulo"));
                chamado.setUsuario(usuarioDao.consultarUsuario(rs.getInt("idusuario")));
                chamado.setSala(salaDao.consultarSala(rs.getInt("idsala")));
                chamado.setCategoria(categoriaDao.consultarCategoria(rs.getInt("idcategoria")));
                chamado.setEquipamento(equipamentoDao.consultarEquipamento(rs.getInt("idequipamento")));
                chamado.setDescricao(rs.getString("descricao"));
                chamado.setData(rs.getDate("data"));
                chamado.setEstado(rs.getBoolean("estado"));
                return chamado;
            }else{
              return null;
            }
        } finally {
            ps.close();
            con.close();
        }
    }

    //listando todos os chamados
    public List<Chamado> chamados() throws SQLException {

        PreparedStatement ps = null;
        Connection con = null;

        String sql = "SELECT * FROM chamado where id!=0";

        try {
            con = ConexaoJDBC.getConexao();
            ps = con.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();

            result = new ArrayList<Chamado>();
            usuarioDao = new UsuarioDAO();
            salaDao = new SalaDAO();
            categoriaDao = new CategoriaDAO();
            equipamentoDao = new EquipamentoDAO();

            while (rs.next()) {
                chamado = new Chamado();

                chamado.setId(rs.getInt("id"));
                chamado.setTitulo(rs.getString("titulo"));
                chamado.setUsuario(usuarioDao.consultarUsuario(rs.getInt("idusuario")));
                chamado.setSala(salaDao.consultarSala(rs.getInt("idsala")));
                chamado.setCategoria(categoriaDao.consultarCategoria(rs.getInt("idcategoria")));
                chamado.setEquipamento(equipamentoDao.consultarEquipamento(rs.getInt("idequipamento")));
                chamado.setDescricao(rs.getString("descricao"));
                chamado.setData(rs.getDate("data"));
                chamado.setEstado(rs.getBoolean("estado"));
                
                result.add(chamado);
            }
        } finally {
            ps.close();
            con.close();
        }
        return result;
    }

    public void editarChamado(Chamado chamado) {
    }
}
